Software development and support costs are driven by many factors including increasing software complexity and the need to support multiple hardware platforms and operating systems. To help reduce these costs, there is an increasing emphasis on creating modular software solutions to allow reuse of software components (i.e., modules). Many different frameworks to support dynamic use of software components have been developed to meet these needs. Examples of such frameworks include the Java™ Module System (JAM), the OSGi™ Service Platform, the Microsoft® .NET Framework, the Apache Software Foundation Maven, and the Sun Microsystems NetBeans™. Java™ and NetBeans™ are trademarks of Sun Microsystems, Inc. OSGi™ is a trademark of The OSGi Alliance.
While specific implementation details and programming languages supported may vary, module frameworks share a number of common features. Functionality included in a module framework may include a runtime engine, module life cycle management, one or more module repositories, and module version management. This functionality allows “off the shelf” software modules to be reused and integrated into applications coherently and to be dynamically added, updated, and removed from the framework. In addition, modules may dynamically discover and cooperate with each other.
In module frameworks, a given module may be defined to depend on multiple other modules, which may in turn, depend on yet other modules. More specifically, a module may export one or more interfaces that may be imported by other modules. As a result, when a module is instantiated by the framework, some initialization may need to be performed to ensure, among other things, that any modules on which that module depends are present (i.e., that the imported interfaces are available) and can also be instantiated, and that there are no conflicts among these modules (e.g., two modules export a class having the same name). This initialization process typically varies depending on the framework and the composition of the modules.